#ifndef SROS_DEVICE_DRIVER_CONFIG_HPP
#define SROS_DEVICE_DRIVER_CONFIG_HPP

#include <string>
#include <commons/config/config.hpp>

namespace sros::device::cfg
{
    // 驱动器型号
    enum DriverType : uint8_t
    {
        Motec      = 0, // 莫泰克
        ZL8015D    = 1, // 中菱 ZL8015D
        ZL8015     = 2, // 中菱 ZL8015
        SDCQ       = 3, // 时代超群
    };

    // 驱动器方向
    enum DriverDir : uint8_t
    {
        H = 0,  // 水平
        V = 1,  // 垂直
        P = 2,  // 推拉
        R = 3   // 旋转
    };

    // 电机初始转向
    enum MotorDir : uint8_t
    {
        F = 0,  // 向前
        B = 1   // 向后
    };

    enum BmsType : uint8_t
    {
        HX = 0  // 华兴电池
    };

    // 驱动器配置
    struct DriverCfg
    {
        uint8_t     id = 0;                   // 驱动器id
        uint16_t    can_index = 1;            // 绑定的CAN口索引
        DriverType  type = DriverType::Motec; // 驱动器型号
        MotorDir    motor_dir = MotorDir::F;  // 电机初始转向
        uint32_t    resolution = 10000;       // 内置编码器分辨率
        uint16_t    diameter = 100;           // 直径 mm
        float       gear_ratio = 1.0f;        // 减速比
        bool        enable = false;           // 是否启用

        NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(DriverCfg, id, can_index, type, motor_dir, resolution, diameter, gear_ratio, enable)
    };

    // 全部的电机驱动配置
    struct DriversCfg
    {
        std::vector<DriverCfg> H;   // 水平
        DriverCfg V;                // 垂直
        DriverCfg P;                // 推杆
        DriverCfg R;                // 旋转

        std::vector<DriverCfg> drivers;
        NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(DriversCfg, H, V, P, R);
    };
}

#endif